package books.ThinkingInJava.src.Chapter12;


import books.ThinkingInJava.src.Tools.Output;

import java.nio.file.FileAlreadyExistsException;
import java.nio.file.FileSystemException;

public class TestAutoboxException {
    public static void main(String[] args) {
        new TestAutoboxException().test();
    }

    public void test() {
        try {
            a a = new c();
            a.x();
        } catch (FileAlreadyExistsException fae) {
            Output.println("c");
        } catch (FileSystemException fse) {
            Output.println("b");
        } catch (Exception e) {
            Output.println("a");
        }
    }

    /*
        基类抛出的异常必须是子类同方法抛出异常的基类或者相同的异常类型。
     */

    class a {
        public void x() throws Exception {
            throw new Exception("A");
        }
    }

    class b extends a {
        public void x() throws FileSystemException {
            throw new FileSystemException("B");
        }
    }

    class c extends b {
        public void x() throws FileAlreadyExistsException {
            throw new FileAlreadyExistsException("C");
        }
    }
    /*
    运行结果： c
    分析：有继承的特性，最后调用的方d法实质是 class c的x() 方法
     */
}
